/*
 * create by jiaer
 * on 2021/6/13 11:18
 * 1888. 使二进制字符串字符交替的最少反转次数
 * https://leetcode-cn.com/problems/minimum-number-of-flips-to-make-the-binary-string-alternating/
 */
public class Solution1888 {

    /**
     * 给你一个二进制字符串 s 。你可以按任意顺序执行以下两种操作任意次：
     * <p>
     * 类型 1 ：删除 字符串 s 的第一个字符并将它 添加 到字符串结尾。
     * 类型 2 ：选择 字符串 s 中任意一个字符并将该字符 反转 ，也就是如果值为 '0' ，则反转得到 '1' ，反之亦然。
     * 请你返回使 s 变成 交替 字符串的前提下， 类型 2 的 最少 操作次数 。
     * <p>
     * 我们称一个字符串是 交替 的，需要满足任意相邻字符都不同。
     * <p>
     * 比方说，字符串 "010" 和 "1010" 都是交替的，但是字符串 "0100" 不是。
     *  
     * <p>
     * 示例 1：
     * <p>
     * 输入：s = "111000"
     * 输出：2
     * 解释：执行第一种操作两次，得到 s = "100011" 。
     * 然后对第三个和第六个字符执行第二种操作，得到 s = "101010" 。
     * 示例 2：
     * <p>
     * 输入：s = "010"
     * 输出：0
     * 解释：字符串已经是交替的。
     * 示例 3：
     * <p>
     * 输入：s = "1110"
     * 输出：1
     * 解释：对第二个字符执行第二种操作，得到 s = "1010" 。
     *  
     * <p>
     * 提示：
     * <p>
     * 1 <= s.length <= 105
     * s[i] 要么是 '0' ，要么是 '1' 。
     * <p>
     * 来源：力扣（LeetCode）
     * 链接：https://leetcode-cn.com/problems/minimum-number-of-flips-to-make-the-binary-string-alternating
     * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
     *
     * @param s
     * @return
     */
    public int minFlips(String s) {
        //判断s是否交替
        if(isAlternately(s)) {
            return 0;
        }

        //不是交替
        //s=000000101
        //仅用步骤2：101010101 => 3
        //步骤12：000001010=>010101010=>2

        //长度为奇数；使用两种收获更大

        //长度为偶数，仅使用2即可


        return 0;
    }

    //将最开始元素移动至结尾
    public String removeFirstToEnd(String s) {
        return s.substring(1, s.length() - 1) + s.substring(0, 1);
    }

    //选择 字符串 s 中任意一个字符并将该字符 反转 ，也就是如果值为 '0' ，则反转得到 '1' ，反之亦然。
    public String reverse(String s, int index) {
        char[] chars = s.toCharArray();
        chars[index] = chars[index] == '0' ? '1' : '0';
        s = "";
        for (char c : chars) {
            s += c;
        }
        return s;
    }

    //判断是否是交替
    public boolean isAlternately(String s) {
        char[] chars = s.toCharArray();
        //当长度小于2时，返回true
        if(chars.length<2) {
            return true;
        }
        //对比变量:0|1
        char flat = chars[0];
        for (int i = 1; i < chars.length; i++) {
            //判断下一个字符和上一个字符是否相同，如果相同，则返回false
            if(chars[i] == flat) {
                return false;
            }
            flat = chars[i];
        }
        return true;
    }

    public static void main(String[] args) {
        Solution1888 solution1888 = new Solution1888();
        System.out.println(solution1888.reverse("1010", 2));
    }
}
